/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package dao.impl;

import dao.ControleDAOException;
import dao.InterfaceUsuarioDAO;
import dao.Conexao;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import model.Usuario;

/**
 *
 * @author AMOR
 */
public class UsuarioDAO implements InterfaceUsuarioDAO{

    private static class usuario {

        public usuario() {
        }
    }
    
    private Connection conn;
    
    public UsuarioDAO() throws ControleDAOException{
        try {            
            this.conn = Conexao.getConnection(); 
        } catch (Exception e) {
            throw new ControleDAOException("Erro: " + ":\n" + e.getMessage());
        }
    }
 
   

    public void atualizar(Usuario usuario) throws ControleDAOException {
        PreparedStatement ps = null;
        Connection conn1 = null;
        if (usuario == null)
            throw new ControleDAOException("Usuario nao informado!");
        try {
            String sql = "UPDATE usuario SET nome=?, senha=? " +
                    "WHERE email=?";
            conn1 = this.conn;
            ps = conn1.prepareStatement(sql);
            ps.setString(1, usuario.getNome());
            ps.setString(2, usuario.getEmail());
            ps.setString(3, usuario.getSenha());
            ps.executeUpdate();
        } catch (SQLException e){
            throw new ControleDAOException("Erro ao atualizar livro " + e);
        } finally {
            Conexao.closeConnection(conn1, ps);
        }
    }

    
    public void inserir(Usuario usuario) throws ControleDAOException {
        PreparedStatement ps = null;
        Connection conn1 = null;
        if (usuario == null)
            throw new ControleDAOException("Nenhum usuario foi informado!");
        try {
            
            String sql = "INSERT INTO usuarios (nome, email, senha) " +
                    "values (?, ?, ?)";
            conn1 = this.conn;
            ps = conn1.prepareStatement(sql);
            ps.setString(1, usuario.getNome());
            ps.setString(2, usuario.getEmail());
            ps.setString(3, usuario.getSenha());
            ps.executeUpdate();
        } catch (SQLException e){
            throw new ControleDAOException("Erro ao inserir usuario " + e);
        } finally {
            Conexao.closeConnection(conn1, ps);
        }
    }

  
    public void excluir(Usuario usuario) throws ControleDAOException {
        PreparedStatement ps = null;
        Connection conn1 = null;
        if (usuario == null)
            throw new ControleDAOException("Usuario nao informado!");
        try {
            String sql = "DELETE FROM usuarios WHERE email=?";
            conn1 = this.conn;
            ps = conn1.prepareStatement(sql);
            ps.setString(1, usuario.getEmail());
            ps.executeUpdate();
        } catch (SQLException e){
            throw new ControleDAOException("Erro ao excluir usuario " + e);
        } finally {
           Conexao.closeConnection(conn1, ps);
        }
    }


    
     public Usuario procurarUsuario(String cpf) throws ControleDAOException{
        PreparedStatement ps = null;
        Connection conn1 = null;
        ResultSet rs = null;
        try {
            String sql = "SELECT * FROM usuarios WHERE cpf=?";
            conn1 = this.conn;
            ps = conn1.prepareStatement(sql);
            ps.setString(1, cpf);
            rs = ps.executeQuery();
            if( !rs.next()) {
                throw new ControleDAOException("Nao foi encontrado nenhum registro com o CPF " + cpf);
            }
            String nome = rs.getString("nome");
            String senha = rs.getString("senha");
            String cpf1 = rs.getString("cpf");

            Usuario usuario = new Usuario(nome, cpf1, senha);
            return usuario;
        } catch (SQLException e){
            throw new ControleDAOException("Erro ao procurar usuario" + e);
        } finally {
            Conexao.closeConnection(conn1, ps, rs);
        }
    }
    
     public Usuario procurarUsuario(String cpf, String senha) throws ControleDAOException{
        PreparedStatement ps = null;
        Connection conn1 = null;
        ResultSet rs = null;
        Usuario usuario = null;
        try {
            String sql = "SELECT * FROM usuarios WHERE cpf=? AND senha=?";
            conn1 = this.conn;
            ps = conn1.prepareStatement(sql);
            ps.setString(1, cpf);
            ps.setString(2, senha);
            rs = ps.executeQuery();
            while (rs.next()) {
                    String nome = rs.getString("cpf");
                    String senha1 = rs.getString("senha");
                    String cpf1 = rs.getString("cpf");
                    usuario = new Usuario(nome, cpf1, cpf1);
            }
            return usuario;
        } catch (SQLException e){
            throw new ControleDAOException("Erro ao procurar usuario " + e);
        } finally {
            Conexao.closeConnection(conn1, ps, rs);
        }
    }
     
     
     public List todosUsuarios () throws ControleDAOException{
        PreparedStatement ps = null;
        Connection conn1 = null;
        ResultSet rs = null;
        try {
            String sql = "SELECT * FROM usuarios";
            conn1 = this.conn;
            ps = conn1.prepareStatement(sql);
            rs = ps.executeQuery();
            List<Usuario> listUsuario = new ArrayList<Usuario>();
            while (rs.next()) {
                String idade = rs.getString(1);
                String senha = rs.getString(2);
                String email = rs.getString(3);
                String cpf = rs.getString(4);
                String dataNascimento = rs.getString(5);
                String descricao = rs.getString(6);
                String telefone = rs.getString(7);
                String nome = rs.getString(8);
               
                listUsuario.add(new Usuario(nome, cpf, senha));
            }
            return listUsuario;
        } catch (SQLException e){
            throw new ControleDAOException("Erro ao listar Usuarios " + e);
        } finally {
            Conexao.closeConnection(conn1, ps, rs);
        }
    }


    
    
}
